package com.es.designmode.proxy.dynamic;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 * @author Will
 */
public class ProxyHandler implements InvocationHandler {

    private Object obj;

    public ProxyHandler(Object obj) {
        this.obj = obj;
    }

    /**
     * 动态代理需要实现的方法，通过反射实现方法的执行
     *
     * @param proxy  代理对象，只是一个约定，需要自己指定真实对象
     * @param method 代理执行方法
     * @param args   方法入参
     * @return 方法反射运行结果
     * @throws Throwable
     */
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("测试动态代理！");
        System.out.println("Before invoke " + method.getName());
        Object invoke = method.invoke(obj, args);
        System.out.println("After invoke " + method.getName());
        return invoke;
    }

}
